/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.talentos.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.talentos.vo.TipoDesligamentoVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Wanderson de Souza Caldas   RA: 20604325
 */
public class TipoDesligamentoDAO extends BaseDAO<TipoDesligamentoVO> {

    @Override
    public void inserir(TipoDesligamentoVO tipoDesligamento) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TT_TipoDesligamento(NO_TipoDesligamento, DS_TipoDesligamento)");
        query.append("VALUES (?, ?)");

        List<?> parametros = criarParametros(tipoDesligamento.getNoTipoDesligamento(),
                tipoDesligamento.getDsTipoDesligamento());

        Integer idGerado = ((Long) executarInsercao(query.toString(), parametros)).intValue();

        tipoDesligamento.setIdTipoDesligamento(idGerado);
    }

    @Override
    public void alterar(TipoDesligamentoVO tipoDesligamento) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TT_TipoDesligamento SET NO_TipoDesligamento = ?,");
        query.append("DS_TipoDesligamento = ?");
        query.append("WHERE ID_TipoDesligamento = ?");

        List<?> parametros = criarParametros(tipoDesligamento.getNoTipoDesligamento(), tipoDesligamento.getDsTipoDesligamento(),
                tipoDesligamento.getIdTipoDesligamento());

        executarAlteracao(query.toString(), parametros);
    }
@Override
    public void excluir(TipoDesligamentoVO tipoDesligamento) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TT_TipoDesligamento");
        query.append("WHERE ID_TipoDesligamento = ?");

        executarAlteracao(query.toString(), criarParametros(tipoDesligamento.getIdTipoDesligamento()));
    }
@Override
    public TipoDesligamentoVO consultarPorId(Serializable id) {

        TipoDesligamentoVO tipoDesligamento = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TT_TipoDesligamento T WHERE T.ID_TipoDesligamento = ?");

        tipoDesligamento = consultarUm(query.toString(), criarParametros(id));

        return tipoDesligamento;
    }

@Override
    public List<TipoDesligamentoVO> consultarPorExemplo(TipoDesligamentoVO tipoDesligamento) {

        List<TipoDesligamentoVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TT_TipoDesligamento T WHERE 1=1");

        mapearQueryParaExemplo(query, tipoDesligamento);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

public List<TipoDesligamentoVO> consultarTudo(TipoDesligamentoVO tipoDesligamento) {

        List<TipoDesligamentoVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TT_TipoDesligamento T ");

        mapearQueryParaExemplo(query, tipoDesligamento);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

@Override
    protected TipoDesligamentoVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        TipoDesligamentoVO tipoDesligamento = new TipoDesligamentoVO();

        tipoDesligamento.setIdTipoDesligamento(rs.getInt("ID_TipoDesligamento"));
        tipoDesligamento.setNoTipoDesligamento(rs.getString("NO_TipoDesligamento"));
        tipoDesligamento.setDsTipoDesligamento(rs.getString("DS_TipoDesligamento"));

        return tipoDesligamento;
    }

public List<TipoDesligamentoVO> consultarTiposOrdenadoPorNome() {
        ConstrutorSQL sql = new ConstrutorSQL();

        sql.append("SELECT *");
        sql.append("FROM TT_TipoDesligamento A");
        sql.append("ORDER BY NO_TipoDesligamento ASC");

        return consultar(sql.toString());
    }

@Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, TipoDesligamentoVO tipoDesligamento) {

        if (tipoDesligamento.getNoTipoDesligamento() != null && !tipoDesligamento.getNoTipoDesligamento().isEmpty()) {
            query.append("AND T.NO_TipoDesligamento LIKE ?");
            adicionarParametro( "%" + tipoDesligamento.getNoTipoDesligamento()+ "%");
        }

        if (tipoDesligamento.getDsTipoDesligamento() != null && !tipoDesligamento.getDsTipoDesligamento().isEmpty()) {
            query.append("AND T.DS_TipoDesligamento LIKE ?");
            adicionarParametro("%" + tipoDesligamento.getDsTipoDesligamento() + "%");
        }
    }

}



